﻿using System.Collections.Generic;
using System.IO;
using System.Xml;

namespace FolderSynchronizer
{
	/// <summary>
	/// Класс, в котором реализуются методы для работы с xml файлами.
	/// </summary>
	public static class ForXmlFiles
	{
		/// <summary>
		/// Метод возвращающий список файлов для копирования, прочитанный из xml файла.
		/// </summary>
		/// <param name="filepath">Путь к xml файлу.</param>
		/// <param name="sourcePath">Путь к папке с файлами, по которым считывается информация </param>
		/// <returns>Список типа FileInformation.</returns>
		public static List<FileInformation> ReadXmlDocument(string filepath, string sourcePath)
		{
			if (File.Exists(filepath))
			{
				// Объявляем и забиваем файл в документ
				var xd = new XmlDocument();
				var fs = new FileStream(filepath, FileMode.Open);
				xd.Load(fs);

				var listWithInfoAboutFilesForCopy = new List<FileInformation>();
				XmlNodeList list = xd.GetElementsByTagName("File"); // Создаем и заполняем лист по тегу "File"

				for (int i = 0; i < list.Count; i++)
				{
					XmlAttributeCollection all = list[i].Attributes;
					if (all != null)
					{
						XmlAttribute path = all["path"];
						XmlAttribute chackSum = all["hash"];
						string pathFull = Path.Combine(sourcePath, path.InnerText);
						listWithInfoAboutFilesForCopy.Add(new FileInformation(new FileInfo(pathFull), chackSum.InnerText.ToUpper()));
					}
					else
					{
                        fs.Close();
					    throw new SynchronizerException(SynchronizerException.ErrorType.AttributeNotFound);
					}
				}

                fs.Close();
				return listWithInfoAboutFilesForCopy;
			}
			else
			{
				throw new FileNotFoundException();
			}
		}
	}
}
